pub mod lexer;

#[cfg(test)]
mod tests {
    use super::lexer::*;
    use std::fs;

    #[test]
    fn test_integer_conversion() {
        // 测试十六进制数字转换
        assert_eq!(parse_int("0x1F"), 31);
        assert_eq!(parse_int("0xFF"), 255);
        
        // 测试八进制数字转换
        assert_eq!(parse_int("077"), 63);
        assert_eq!(parse_int("0123"), 83);
        
        // 测试十进制数字
        assert_eq!(parse_int("123"), 123);
        assert_eq!(parse_int("0"), 0);
    }

    #[test] 
    fn test_basic_lexing() {
        // 创建临时测试文件
        let test_content = "const int x = 0x1F;";
        fs::write("temp_test.sy", test_content).unwrap();
        
        let tokens = parse_file("temp_test.sy").unwrap();
        
        // 验证token数量和类型
        assert_eq!(tokens.len(), 6);
        
        match &tokens[0].token_type {
            TokenType::Keyword(Keyword::Const) => {
                assert_eq!(tokens[0].token_type.lexeme(), "const");
            }
            _ => panic!("Expected const keyword"),
        }
        
        match &tokens[4].token_type {
            TokenType::IntConst(31) => {},
            _ => panic!("Expected integer constant with value 31"),
        }
        
        // 清理
        fs::remove_file("temp_test.sy").unwrap();
    }
}
